package lexico;

import util.Constantes;
import erro.ErroLexico;
import erro.ErroTipoInvalido;

public class Palavra extends ASimbolo {
	
	private String string;
	
	private String tipo;

	/**
	 * Construtor
	 * @param symbol
	 */
	public Palavra(int codigo, String simbolo, String string, int linha) {
		super(codigo, simbolo, linha);		
		this.string = string;
		this.tipo = "palavra";
	}
	

	public String getString() {
		return string;
	}
		
	
	@Override
	public boolean verificaRegras() throws ErroLexico {
		if (getSimbolo().length() > Constantes.TAMANHO_LIMITE) {
			setSimbolo(getSimbolo().substring(0, Constantes.TAMANHO_LIMITE-1)); 
			throw new ErroLexico(Constantes.EXCEDIDO_MAXIMO_ERRO + Constantes.TAMANHO_LIMITE, -1);
		}
		return true;
	}
	
	
	@Override
	public String getTipo() {
		return this.tipo;
	}

	@Override
	public void setTipo(String tipo) throws ErroTipoInvalido {
		if (tipo.equalsIgnoreCase("palavra")){
			this.tipo = tipo;	
		} else {
			throw new ErroTipoInvalido("Tentativa de atribuicao um tipo invalido a uma string: " + tipo,
					getLinha());
		}		
	}
}
